home *** CD-ROM | disk | FTP | other *** search
/ Joystick Magazine 1996 May / cd joy 71No13.iso / pc / demos / waynegre / myv.cod < prev    next >
Text File  |  1994-10-25  |  10KB  |  326 lines

  1. ;    Static Name Aliases
  2. ;
  3.     TITLE   d:\peter\myv.c
  4.     .MODEL  LARGE
  5.     .386p
  6.     .387
  7. INCLUDELIB      LLIBCE
  8. INCLUDELIB    OLDNAMES.LIB
  9. MYV_TEXT    SEGMENT  WORD USE16 PUBLIC 'CODE'
  10. MYV_TEXT    ENDS
  11. _DATA    SEGMENT  WORD USE16 PUBLIC 'DATA'
  12. _DATA    ENDS
  13. CONST    SEGMENT  WORD USE16 PUBLIC 'CONST'
  14. CONST    ENDS
  15. _BSS    SEGMENT  WORD USE16 PUBLIC 'BSS'
  16. _BSS    ENDS
  17. DGROUP    GROUP    CONST, _BSS, _DATA
  18.     ASSUME DS: DGROUP, SS: DGROUP
  19. PUBLIC  _VDestPtr
  20. PUBLIC  _VSrcPtr
  21. PUBLIC  _VSrcBPL
  22. PUBLIC  _VSegAdd
  23. PUBLIC  _VOffAdd
  24. _DATA      SEGMENT
  25. _VDestPtr    DD    00H
  26. _VSrcPtr    DD    00H
  27. _VSrcBPL    DW    00H
  28. _VSegAdd    DW    00H
  29. _VOffAdd    DW    00H
  30.     PUBLIC    _myVirtualVirtual
  31. _myVirtualVirtual    PROC FAR    ;  COMDAT
  32. ;|*** //#include <stdio.h>
  33. ;|*** //#include <stdlib.h>
  34. ;|*** #include <dos.h>
  35. ;|*** //#include <bios.h>
  36. ;|*** #include <ctype.h>
  37. ;|*** 
  38. ;|*** char far *VDestPtr = 0;
  39. ;|*** char far *VSrcPtr = 0;
  40. ;|*** 
  41. ;|*** unsigned int VSrcBPL = 0, VSegAdd = 0, VOffAdd = 0;
  42. ;|*** 
  43. ;|*** ///////////////////////////////////////////////////////////////////
  44. ;|*** //////////////////////////////////////////////////////////////////
  45. ;|*** int myVirtualVirtual(int nrLines, int fromBPL, int toBPL)
  46. ;|***     {
  47. ; Line 15
  48.     *** 000000    c8 0a 00 00         enter    10,0
  49.     *** 000004    57             push    di
  50.     *** 000005    56             push    si
  51. ;    nrLines = 6
  52. ;    fromBPL = 8
  53. ;    toBPL = 10
  54. ;    retcode = -2
  55. ;    yy = -6
  56. ;    fseg = -4
  57. ;    foff = -8
  58. ;    fbpl = -10
  59. ;    fbplmod = -4
  60. ;    to_bpl = -6
  61. ;|***     int retcode = 0;
  62. ;|***     
  63. ;|***     register yy = nrLines;
  64. ; Line 18
  65.     *** 000006    8b 46 06         mov    ax,WORD PTR [bp+6]    ;nrLines
  66.     *** 000009    89 46 fa         mov    WORD PTR [bp-6],ax    ;yy
  67. ;|***     register unsigned fseg, foff;
  68. ;|***     register int  fbpl = fromBPL / 16;
  69. ; Line 20
  70.     *** 00000c    8b 46 08         mov    ax,WORD PTR [bp+8]    ;fromBPL
  71.     *** 00000f    99             cwd    
  72.     *** 000010    83 e2 0f         and    dx,15    ;000fH
  73.     *** 000013    03 c2             add    ax,dx
  74.     *** 000015    c1 f8 04         sar    ax,4
  75.     *** 000018    89 46 f6         mov    WORD PTR [bp-10],ax    ;fbpl
  76. ;|*** 
  77. ;|***     int fbplmod;
  78. ;|***     int to_bpl = toBPL;
  79. ;|***     
  80. ;|*** 
  81. ;|*** //    memcpy(VDestPtr, VSrcPtr, to_bpl);
  82. ;|***     memcpy(VDestPtr, VSrcPtr, 320);
  83. ; Line 27
  84.     *** 00001b    a1 00 00         mov    ax,WORD PTR _VDestPtr
  85.     *** 00001e    8b 16 02 00         mov    dx,WORD PTR _VDestPtr+2
  86.     *** 000022    8b 1e 00 00         mov    bx,WORD PTR _VSrcPtr
  87.     *** 000026    8b 36 02 00         mov    si,WORD PTR _VSrcPtr+2
  88.     *** 00002a    1e             push    ds
  89.     *** 00002b    56             push    si
  90.     *** 00002c    8b f8             mov    di,ax
  91.     *** 00002e    8b f3             mov    si,bx
  92.     *** 000030    8e c2             mov    es,dx
  93.     *** 000032    1f             pop    ds
  94.     ASSUME DS: DGROUP
  95.     *** 000033    66 b9 50 00 00 00     mov    ecx,80    ;00000050H
  96.     *** 000039    f3             rep
  97.     *** 00003a    66 a5             movsd
  98.     *** 00003c    1f             pop    ds
  99.     ASSUME DS: DGROUP
  100. ;|***     fbplmod = fromBPL % 16;
  101. ;|***     fseg = _FP_SEG(VSrcPtr);
  102. ; Line 29
  103.     *** 00003d    a1 02 00         mov    ax,WORD PTR _VSrcPtr+2
  104.     *** 000040    89 46 fc         mov    WORD PTR [bp-4],ax    ;fseg
  105. ;|***     foff = _FP_OFF(VSrcPtr) + fbplmod;
  106. ; Line 30
  107.     *** 000043    8b 46 08         mov    ax,WORD PTR [bp+8]    ;fromBPL
  108.     *** 000046    b9 10 00         mov    cx,16    ;0010H
  109.     *** 000049    99             cwd    
  110.     *** 00004a    f7 f9             idiv    cx
  111.     *** 00004c    8b c2             mov    ax,dx
  112.     *** 00004e    03 16 00 00         add    dx,WORD PTR _VSrcPtr
  113.     *** 000052    89 56 f8         mov    WORD PTR [bp-8],dx    ;foff
  114. ;|***     if (fbplmod)
  115. ; Line 31
  116.     *** 000055    0b c0             or    ax,ax
  117.     *** 000057    74 3b             je    SHORT $L289
  118. ;|***         {
  119. ;|***         while(--yy)
  120. ; Line 33
  121.                     $FC273:
  122.     *** 000059    ff 4e fa         dec    WORD PTR [bp-6]    ;yy
  123.     *** 00005c    74 72             je    SHORT $I275
  124. ;|***             {
  125. ;|*** //            VDestPtr += to_bpl;
  126. ;|*** //            VSrcPtr = _MK_FP(_FP_SEG(VSrcPtr) + (from_bpl / 16), _FP_OFF(VSrcPtr) + (from_bpl % 16));
  127. ;|***             VDestPtr += 320;
  128. ; Line 37
  129.     *** 00005e    81 06 00 00 40 01     add    WORD PTR _VDestPtr,320    ;0140H
  130. ;|***             fseg += fbpl;
  131. ;|***             VSrcPtr = _MK_FP(fseg, foff);
  132. ; Line 39
  133.     *** 000064    8b 46 f6         mov    ax,WORD PTR [bp-10]    ;fbpl
  134.     *** 000067    01 46 fc         add    WORD PTR [bp-4],ax    ;fseg
  135.     *** 00006a    8b 46 f8         mov    ax,WORD PTR [bp-8]    ;foff
  136.     *** 00006d    8b 56 fc         mov    dx,WORD PTR [bp-4]    ;fseg
  137.     *** 000070    a3 00 00         mov    WORD PTR _VSrcPtr,ax
  138.     *** 000073    89 16 02 00         mov    WORD PTR _VSrcPtr+2,dx
  139. ;|*** //            memcpy(VDestPtr, VSrcPtr, to_bpl);
  140. ;|***             memcpy(VDestPtr, VSrcPtr, 320);
  141. ; Line 41
  142.     *** 000077    8b 1e 00 00         mov    bx,WORD PTR _VDestPtr
  143.     *** 00007b    8b 36 02 00         mov    si,WORD PTR _VDestPtr+2
  144.     *** 00007f    1e             push    ds
  145.     *** 000080    56             push    si
  146.     *** 000081    8b fb             mov    di,bx
  147.     *** 000083    8b f0             mov    si,ax
  148.     *** 000085    07             pop    es
  149.     *** 000086    8e da             mov    ds,dx
  150.     ASSUME DS: NOTHING
  151.     *** 000088    66 b9 50 00 00 00     mov    ecx,80    ;00000050H
  152.     *** 00008e    f3             rep
  153.     *** 00008f    66 a5             movsd
  154.     *** 000091    1f             pop    ds
  155.     ASSUME DS: DGROUP
  156. ;|***             }
  157. ; Line 42
  158.     *** 000092    eb c5             jmp    SHORT $FC273
  159.                     $L289:
  160. ;|***         }
  161. ;|***     else
  162. ;|***         {
  163. ;|***         while(--yy)
  164. ; Line 46
  165.     *** 000094    ff 4e fa         dec    WORD PTR [bp-6]    ;yy
  166.     *** 000097    74 37             je    SHORT $I275
  167. ;|***             {
  168. ;|***             VDestPtr += 320;
  169. ; Line 48
  170.     *** 000099    81 06 00 00 40 01     add    WORD PTR _VDestPtr,320    ;0140H
  171. ;|***             fseg += fbpl;
  172. ;|***             VSrcPtr = _MK_FP(fseg, foff);
  173. ; Line 50
  174.     *** 00009f    8b 46 f6         mov    ax,WORD PTR [bp-10]    ;fbpl
  175.     *** 0000a2    01 46 fc         add    WORD PTR [bp-4],ax    ;fseg
  176.     *** 0000a5    8b 46 f8         mov    ax,WORD PTR [bp-8]    ;foff
  177.     *** 0000a8    8b 56 fc         mov    dx,WORD PTR [bp-4]    ;fseg
  178.     *** 0000ab    a3 00 00         mov    WORD PTR _VSrcPtr,ax
  179.     *** 0000ae    89 16 02 00         mov    WORD PTR _VSrcPtr+2,dx
  180. ;|*** //            memcpy(VDestPtr, VSrcPtr, to_bpl);
  181. ;|***             memcpy(VDestPtr, VSrcPtr, 320);
  182. ; Line 52
  183.     *** 0000b2    8b 1e 00 00         mov    bx,WORD PTR _VDestPtr
  184.     *** 0000b6    8b 36 02 00         mov    si,WORD PTR _VDestPtr+2
  185.     *** 0000ba    1e             push    ds
  186.     *** 0000bb    56             push    si
  187.     *** 0000bc    8b fb             mov    di,bx
  188.     *** 0000be    8b f0             mov    si,ax
  189.     *** 0000c0    07             pop    es
  190.     *** 0000c1    8e da             mov    ds,dx
  191.     ASSUME DS: NOTHING
  192.     *** 0000c3    66 b9 50 00 00 00     mov    ecx,80    ;00000050H
  193.     *** 0000c9    f3             rep
  194.     *** 0000ca    66 a5             movsd
  195.     *** 0000cc    1f             pop    ds
  196.     ASSUME DS: DGROUP
  197. ;|***             }
  198. ; Line 53
  199.     *** 0000cd    eb c5             jmp    SHORT $L289
  200.     *** 0000cf    90             nop    
  201. ;|***         }
  202. ; Line 54
  203.                     $I275:
  204. ;|***     return(retcode);
  205. ; Line 55
  206.     *** 0000d0    33 c0             xor    ax,ax
  207. ;|***     }
  208. ; Line 56
  209.     *** 0000d2    5e             pop    si
  210.     *** 0000d3    5f             pop    di
  211.     *** 0000d4    c9             leave    
  212.     *** 0000d5    cb             ret    
  213.  
  214. _myVirtualVirtual    ENDP
  215.     PUBLIC    _myVirtualTo320x200Virtual
  216. _myVirtualTo320x200Virtual    PROC FAR    ;  COMDAT
  217. ;|*** 
  218. ;|*** //////////////////////////////////////////////////////////////////////////
  219. ;|*** //////////////////////////////////////////////////////////////////////////
  220. ;|*** void myVirtualTo320x200Virtual()
  221. ;|***     {
  222. ; Line 61
  223.     *** 000000    c8 06 00 00         enter    6,0
  224.     *** 000004    57             push    di
  225.     *** 000005    56             push    si
  226. ;    yy = -4
  227. ;    fseg = -2
  228. ;    foff = -6
  229. ;    segAdd = -8
  230. ;|***     register yy = 200;
  231. ; Line 62
  232.     *** 000006    c7 46 fc c8 00         mov    WORD PTR [bp-4],200    ;00c8H    ;yy
  233. ;|***     register unsigned fseg, foff;
  234. ;|***     register unsigned segAdd = VSegAdd;
  235. ;|***     
  236. ;|***     memcpy(VDestPtr, VSrcPtr, 320);
  237. ; Line 66
  238.     *** 00000b    a1 00 00         mov    ax,WORD PTR _VDestPtr
  239.     *** 00000e    8b 16 02 00         mov    dx,WORD PTR _VDestPtr+2
  240.     *** 000012    8b 1e 00 00         mov    bx,WORD PTR _VSrcPtr
  241.     *** 000016    8b 36 02 00         mov    si,WORD PTR _VSrcPtr+2
  242.     *** 00001a    1e             push    ds
  243.     *** 00001b    56             push    si
  244.     *** 00001c    8b f8             mov    di,ax
  245.     *** 00001e    8b f3             mov    si,bx
  246.     *** 000020    8e c2             mov    es,dx
  247.     *** 000022    1f             pop    ds
  248.     ASSUME DS: DGROUP
  249.     *** 000023    66 b9 50 00 00 00     mov    ecx,80    ;00000050H
  250.     *** 000029    f3             rep
  251.     *** 00002a    66 a5             movsd
  252.     *** 00002c    1f             pop    ds
  253.     ASSUME DS: DGROUP
  254. ;|***     fseg = _FP_SEG(VSrcPtr);
  255. ; Line 67
  256.     *** 00002d    a1 02 00         mov    ax,WORD PTR _VSrcPtr+2
  257.     *** 000030    89 46 fe         mov    WORD PTR [bp-2],ax    ;fseg
  258. ;|***     foff = _FP_OFF(VSrcPtr) + VOffAdd;
  259. ; Line 68
  260.     *** 000033    a1 00 00         mov    ax,WORD PTR _VSrcPtr
  261.     *** 000036    03 06 00 00         add    ax,WORD PTR _VOffAdd
  262.     *** 00003a    89 46 fa         mov    WORD PTR [bp-6],ax    ;foff
  263. ;|*** //    if (!foff)
  264. ;|*** //        {
  265. ;|*** //        while(--yy)
  266. ;|*** //            {
  267. ;|*** //            VDestPtr += 320;
  268. ;|*** //            fseg += VSegAdd;
  269. ;|*** //            VSrcPtr = _MK_FP(fseg, 0);
  270. ;|*** //            memcpy(VDestPtr, VSrcPtr, 320);
  271. ;|*** //            }
  272. ;|*** //        }
  273. ;|*** //    else
  274. ;|*** //        {
  275. ;|***         while(--yy)
  276. ; Line 81
  277.     *** 00003d    eb 35             jmp    SHORT $L291
  278.     *** 00003f    90             nop    
  279.                     $FC286:
  280. ;|***             {
  281. ;|***             VDestPtr += 320;
  282. ; Line 83
  283.     *** 000040    81 06 00 00 40 01     add    WORD PTR _VDestPtr,320    ;0140H
  284. ;|***             fseg += VSegAdd;
  285. ;|***             VSrcPtr = _MK_FP(fseg, foff);
  286. ; Line 85
  287.     *** 000046    a1 00 00         mov    ax,WORD PTR _VSegAdd
  288.     *** 000049    01 46 fe         add    WORD PTR [bp-2],ax    ;fseg
  289.     *** 00004c    8b 46 fa         mov    ax,WORD PTR [bp-6]    ;foff
  290.     *** 00004f    8b 56 fe         mov    dx,WORD PTR [bp-2]    ;fseg
  291.     *** 000052    a3 00 00         mov    WORD PTR _VSrcPtr,ax
  292.     *** 000055    89 16 02 00         mov    WORD PTR _VSrcPtr+2,dx
  293. ;|***             memcpy(VDestPtr, VSrcPtr, 320);
  294. ; Line 86
  295.     *** 000059    8b 1e 00 00         mov    bx,WORD PTR _VDestPtr
  296.     *** 00005d    8b 36 02 00         mov    si,WORD PTR _VDestPtr+2
  297.     *** 000061    1e             push    ds
  298.     *** 000062    56             push    si
  299.     *** 000063    8b fb             mov    di,bx
  300.     *** 000065    8b f0             mov    si,ax
  301.     *** 000067    07             pop    es
  302.     *** 000068    8e da             mov    ds,dx
  303.     ASSUME DS: NOTHING
  304.     *** 00006a    66 b9 50 00 00 00     mov    ecx,80    ;00000050H
  305.     *** 000070    f3             rep
  306.     *** 000071    66 a5             movsd
  307.     *** 000073    1f             pop    ds
  308.     ASSUME DS: DGROUP
  309. ;|***             }
  310. ; Line 87
  311.                     $L291:
  312.     *** 000074    ff 4e fc         dec    WORD PTR [bp-4]    ;yy
  313.     *** 000077    75 c7             jne    SHORT $FC286
  314. ;|*** //        }
  315. ;|***     }
  316. ; Line 89
  317.     *** 000079    5e             pop    si
  318.     *** 00007a    5f             pop    di
  319.     *** 00007b    c9             leave    
  320.     *** 00007c    cb             ret    
  321.  
  322. _myVirtualTo320x200Virtual    ENDP
  323.     *** 00007d    90             nop    
  324. _DATA    ENDS
  325. END
  326.